package br.com.velp.sudecap.mb.usuario;

import br.com.velp.sudecap.comum.BaseController;
import br.com.velp.sudecap.comum.InterfaceCadastro;
import br.com.velp.sudecap.comum.ValidationException;
import br.com.velp.sudecap.entidade.Usuario;
import br.com.velp.sudecap.enumerator.PaginaEnum;
import br.com.velp.sudecap.service.UsuarioService;
import br.com.velp.sudecap.web.util.MensagemUtil;
import java.util.Date;
import org.lindbergframework.spring.scope.AccessScoped;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

/**
 * <sumario>
 * <objetivo>"Rastreabilidade"</objetivo>
 * <autor>EDUARDO SANTOS DE OLIVEIRA</autor>
 * <versao>1.0.0.0</versao>
 * <data_criacao> 17.10.2012 </data_criacao>
 * <data_ultima_alteracao> N/A </data_ultima_alteracao>
 * <requisito_afetado> RF001.03 - Cadastrar Usuários </requisito_afetado>
 * <descricao> Managead Bean responsável por controlar as operações de
 *             Inclusão/Alteração/Detalhamento de Usuários </descricao>
 * </sumario>
 */
@Controller("manterUsuario")
@AccessScoped
public class ManterUsuario extends BaseController implements InterfaceCadastro {
    
    public static final Long serialVersionUID = 1L;

    private Usuario usuario;
    private Long idUsuarioSelecionado;
    private boolean isDetalhamento;
    
    @Autowired
    private UsuarioService usuarioService;

    @Override
    public String setup() {

	this.usuario = new Usuario();
	this.isDetalhamento = false;

	return PaginaEnum.MANTER_USUARIO.getValue();

    }

    @Override
    public String editSetup() {

	String pagina = setup();
	this.usuario = this.usuarioService.obterPorId(this.idUsuarioSelecionado);

	return pagina;

    }

    @Override
    public String detalhar() {

	String pagina = editSetup();
	this.isDetalhamento = true;

	return pagina;

    }

    @Override
    public String salvar() throws Exception {

	try {
	    
	    if (this.usuario.getId() == null) {
		this.usuario.setDataCadastro(new Date());
		this.usuario.setIdUsuarioCadastro(getContexto().getUsuario().getId());
		this.usuario.setId(this.usuarioService.salvar(this.usuario));
	    } else {
		this.usuario.setDataAlteracao(new Date());
		this.usuario.setIdUsuarioAlteracao(getContexto().getUsuario().getId());
		this.usuarioService.atualizar(this.usuario);
	    }

	    this.isDetalhamento = true;

	    MensagemUtil.exibirMensagemInformacao("global", MensagemUtil.getMensagem("registro_salvo_sucesso"));
	    
	} catch (ValidationException e) {
	    for (String key : e.getMensagens()) {
		MensagemUtil.exibirMensagemErro("global", MensagemUtil.getMensagem(key));
	    }
	} catch (Exception e) {
	    MensagemUtil.exibirMensagemErro("global", e.getMessage());
	}

	return null;

    }

    @Override
    public String voltar() {
	
	return PaginaEnum.CONSULTAR_USUARIO.getValue();
	
    }

    // <editor-fold desc="GETTERS AND SETTERS" defaultstate="collapsed">            
    public Long getIdUsuarioSelecionado() {
	return idUsuarioSelecionado;
    }

    public void setIdUsuarioSelecionado(Long idUsuarioSelecionado) {
	this.idUsuarioSelecionado = idUsuarioSelecionado;
    }

    public boolean isIsDetalhamento() {
	return isDetalhamento;
    }

    public void setIsDetalhamento(boolean isDetalhamento) {
	this.isDetalhamento = isDetalhamento;
    }

    public Usuario getUsuario() {
	return usuario;
    }

    public void setUsuario(Usuario usuario) {
	this.usuario = usuario;
    }
    // </editor-fold>        
    
}
